package com.coollang.smartbra.views;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.HorizontalScrollView;
import android.widget.Scroller;

/**
 * @author: Timmy
 * @data: 2018/1/25
 * @Fuction:
 */

public class SlowHorizontalScrollView extends HorizontalScrollView {
    private Scroller mScroller;

    public SlowHorizontalScrollView(Context context) {
        super(context);
        mScroller = new Scroller(context);
    }

    public SlowHorizontalScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mScroller = new Scroller(context);
    }

    public SlowHorizontalScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        mScroller = new Scroller(context);
    }

    /**
     * 调用此方法滚动到目标位置  duration滚动时间
     *
     * @param fx
     * @param fy
     * @param duration
     */
    public void smoothScrollToSlow(int fx, int fy, int duration) {

        // mScroller.getFinalX();  普通view使用这种方法
        int dx = fx - getScrollX();

        // mScroller.getFinalY();
        int dy = fy - getScrollY();
        smoothScrollBySlow(dx, dy, duration);
    }

    /**
     * 调用此方法设置滚动的相对偏移
     * @param dx
     * @param dy
     * @param duration
     */
    public void smoothScrollBySlow(int dx, int dy, int duration) {

        //设置mScroller的滚动偏移量

        // scrollView使用的方法（因为可以触摸拖动）
        mScroller.startScroll(getScrollX(), getScrollY(), dx, dy, duration);
        // mScroller.startScroll(mScroller.getFinalX(), mScroller.getFinalY(), dx, dy, duration);  //普通view使用的方法
        invalidate();//这里必须调用invalidate()才能保证computeScroll()会被调用，否则不一定会刷新界面，看不到滚动效果
    }

    @Override
    public void computeScroll() {

        //先判断mScroller滚动是否完成
        if (mScroller.computeScrollOffset()) {

            //这里调用View的scrollTo()完成实际的滚动
            scrollTo(mScroller.getCurrX(), mScroller.getCurrY());

            //必须调用该方法，否则不一定能看到滚动效果
            postInvalidate();
        }
        super.computeScroll();
    }

    /**
     * 滑动事件，这是控制手指滑动的惯性速度
     */
    @Override
    public void fling(int velocityY) {
        super.fling(velocityY / 4);
    }
}
